using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using 凌依.工具库.随机工具;

public class 角色生成控制器 : 单例_基础管理器<角色生成控制器>
{
    private 随机姓名 姓名 = new 随机姓名();

    public 角色实体 生成新角色数据(string 种族)
    {
        种族信息 种族信息 = 游戏数据管理器.获取实例.获取种族信息(种族);

        角色实体 返回 = 资源管理器.获取实例.加载<角色实体>("预制体/角色/角色模板");
        返回.属性.能力叠加信息 = new 人型生物_能力叠加信息();
        返回.属性.器官集合 = new 角色器官();

        bool 男 = 随机.随机布尔();
        返回.属性.名称 = 姓名.生成(男);
        if (男)
        {
            返回.实体装备.头部 = 种族信息.随机获取男性面部().克隆<人形生物贴图>();

            返回.实体装备.头发 = 种族信息.随机获取男性发型().克隆<人形生物贴图>();
        }
        else
        {
            返回.实体装备.头部 = 种族信息.随机获取女性面部().克隆<人形生物贴图>();

            返回.实体装备.头发 = 种族信息.随机获取女性发型().克隆<人形生物贴图>();
        }

        //基本裸体
        返回.肤色 = 种族信息.皮肤色.获取随机区间值();

        if (种族信息.发型色 != null)
            返回.实体装备.头发.叠加补色 = 种族信息.发型色.获取随机区间值();
        else
            返回.实体装备.头发.叠加补色 = new Color(Random.Range(0.27f, 0.54f), Random.Range(0.27f, 0.54f), Random.Range(0.27f, 0.54f)) + 返回.实体装备.头发.叠加补色;


        返回.实体装备.肉体 = 种族信息.肉体;

        返回.属性.性别 = 男 ? "男" : "女";

        int 肥胖度 = Random.Range(0, 100);
        if (肥胖度 >= 90)
            返回.属性.质量 = Random.Range(80, 150);
        else if(肥胖度 <= 10)
            返回.属性.质量 = Random.Range(10, 48);
        else
            返回.属性.质量 = Random.Range(48, 80);

        //返回.属性
        返回.属性.更换大脑(种族信息.随机获取器官("大脑"));
        返回.属性.更换皮肤(种族信息.随机获取器官("皮肤"));

        器官信息 眼睛 = 种族信息.随机获取器官("眼睛");
        返回.属性.更换右眼(眼睛);
        返回.属性.更换左眼(眼睛.克隆<器官信息>());

        返回.属性.更换下颚(种族信息.随机获取器官("下颚"));

        器官信息 耳朵 = 种族信息.随机获取器官("耳朵");
        返回.属性.更换左耳(耳朵);
        返回.属性.更换右耳(耳朵.克隆<器官信息>());

        返回.属性.更换心脏(种族信息.随机获取器官("心脏"));

        返回.属性.更换血液(种族信息.随机获取器官("血液"));
        返回.属性.更换躯干(种族信息.随机获取器官("躯干"));
        返回.属性.更换脊椎(种族信息.随机获取器官("脊椎"));

        器官信息 肺部 = 种族信息.随机获取器官("肺部");
        返回.属性.更换左肺(肺部);
        返回.属性.更换右肺(肺部.克隆<器官信息>());

        返回.属性.更换胃部(种族信息.随机获取器官("胃部"));

        器官信息 肾脏 = 种族信息.随机获取器官("肾脏");
        返回.属性.更换左肾(肾脏);
        返回.属性.更换右肾(肾脏.克隆<器官信息>());

        返回.属性.更换肝脏(种族信息.随机获取器官("肝脏"));

        器官信息 手臂 = 种族信息.随机获取器官("手臂");
        返回.属性.更换左臂(手臂);
        返回.属性.更换右臂(手臂.克隆<器官信息>());

        器官信息 腿部 = 种族信息.随机获取器官("腿部");
        返回.属性.更换左腿(腿部);
        返回.属性.更换右腿(腿部.克隆<器官信息>());

        
        //种族加成
        foreach (var item in 种族信息.种族特殊效果)
            返回.属性.能力叠加信息.叠加属性(item);

        return 返回;
    }
}
